package cn.legend.travel.comment.service;

import cn.legend.travel.comment.pojo.param.InsertCommentParam;
import cn.legend.travel.comment.pojo.vo.CommentListItemVO;
import cn.legend.travel.comment.pojo.vo.SecondCommentVo;
import cn.legend.travel.common.pojo.authentication.CurrentPrincipal;
import cn.legend.travel.common.pojo.vo.PageData;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface CommentService {
    PageData<CommentListItemVO> listByArticle(Long articleId, Integer pageNum);

    PageData<CommentListItemVO> listByDelicacy(Long delicacyId, Integer pageNum);

    PageData<CommentListItemVO> listByDestination(Long destinationId, Integer pageNum);

    PageData<CommentListItemVO> listByHotel(Long hotelId, Integer pageNum);

    PageData<CommentListItemVO> listByProduct(Long productId, Integer pageNum);

    PageData<CommentListItemVO> listByReview(Long reviewId, Integer pageNum);

    PageData<CommentListItemVO> listByScenery(Long sceneryId, Integer pageNum);

    void insertProductComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertDelicacyComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertDestinationComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertGuideComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertHotelComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertReviewComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    void insertSceneryComment(CurrentPrincipal currentPrincipal, InsertCommentParam insertCommentParam);

    PageData<SecondCommentVo> getProductSecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getScenerySecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getReviewSecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getHotelSecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getDelicacySecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getGuideSecondComments(Long commentId, Integer pageNum);

    PageData<SecondCommentVo> getDestinationSecondComments(Long commentId, Integer pageNum);

    void deleteDestinationComments(Long commentId);

    void deleteProductSecondComments(Long commentId);

    void deleteScenerySecondComments(Long commentId);

    void deleteReviewSecondComments(Long commentId);

    void deleteHotelSecondComments(Long commentId);

    void deleteDelicacySecondComments(Long commentId);

    void deleteGuideSecondComments(Long commentId);
}
